#ifndef VIDCODEC_H
#define VIDCODEC_H

//Библиотека ffmpeg.
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
};


//Библиотека Qt.
#include <QThread>
#include <QMutex>
#include <QHash>
#include <QVariant>


class VidCodec : public QThread
{
	Q_OBJECT
public:
	//Конструктор.
	VidCodec(QObject *parent = NULL);

	//Деструктор.
	virtual ~VidCodec() {}

	//Функция установки текущего видеокодека по индексу.
	bool setIndex(int index);

	//Функция возврата индекса текущего видеокодека.
	int getIndex();

	//Функция кодирования видео.
	void encode();

	//Функция возврата списка наименований видеокодеков.
	static void enumSupportedCodecs(PixelFormat pixfmt, QHash<int, QVariant> *nameshash);

	//Функция возврата списка наименований форматов видеофайлов.
	static void enumSupportedFormats(int vcodec_index, QHash<int, QVariant> *nameshash);

	//Функция возврата индекса видеокодека от его идентификатора.
	static int getIndexFromID(CodecID id);

	//Функция возврата идентификатора видеокодека от его индекса.
	static CodecID getIDFromIndex(int index);

protected:
	//Функция активации нити.
	virtual void run();

private:
	AVCodec        *vCodec;
	AVCodecContext *vCodecCtx;

	uint8_t *outBuf;
	int outBufSize;

	QMutex mutex;

};

#endif
